<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <canvas id="c1" width="600" height="400"></canvas>

    <script>
        /** @type {HTMLCanvasElement} */
        // 画布
        let c1 = document.getElementById("c1")
        // 画笔
        let ctx = c1.getContext("2d")

        // 线条末端形状 butt round square
        ctx.lineCap = "round"
        // 线条连接处形状 miter round bevel
        ctx.lineJoin = "miter"
        ctx.miterLimit = 10
        // 线条宽度
        ctx.lineWidth = 40

        ctx.lineTo(200, 150)
        ctx.lineTo(250, 200)
        ctx.lineTo(300, 150)
        ctx.stroke()


        ctx.beginPath()
        ctx.lineWidth = 2
        // 虚线【实线长，间隔】
        ctx.setLineDash([10, 5])
        ctx.lineTo(100, 150)
        ctx.lineTo(250, 200)
        ctx.lineTo(400, 150)
        ctx.stroke()

        // 虚线偏移实现动效
        let index = 0
        function render() {
            ctx.beginPath()
            ctx.clearRect(0, 230, 600, 400)
            if (index > 400) {
                index = 0
            }
            ctx.lineWidth = 2
            // 虚线【实线长，间隔】
            ctx.setLineDash([10, 5])
            // 虚线偏移
            ctx.lineDashOffset = index
            index++
            ctx.lineTo(100, 250)
            ctx.lineTo(250, 300)
            ctx.lineTo(400, 250)
            ctx.stroke()
            requestAnimationFrame(render)
        }
        render()

    </script>
</body>

</html>